package com.jiaquyun.jcyx.utils

import android.graphics.Color
import android.text.Spannable
import android.text.SpannableString
import android.text.SpannableStringBuilder
import android.text.style.*
import android.widget.TextView
import java.text.DecimalFormat

object SpanUtils {
//    /**
//     * 传入金额，拼接人民币符号，并设置符号字体为原字体的60%
//     */
//    fun setMoneySymbol(price: String, showDivider: Boolean = false) =
//        buildSpannedString {
//            scale(0.7f) { append("￥") }.append(price)
//            if (showDivider) append("/")
//        }
//
//    /**
//     * 传入金额，生成"xx￥xxx"格式的金额
//     */
//    fun setPrefixMoneyStr(prefix: String = "赚", price: String): SpannedString =
//        buildSpannedString {
//            append(prefix).append("￥").scale(1.2f) { bold { append(price) } }
//        }
//
//    /**
//     * 传入金额，生成"xx￥xxx"格式的金额
//     */
//    fun setPrefixMoneyStr2(prefix: String = "赚", price: String): SpannedString =
//        buildString { append(prefix).scale(1.2f) { bold { append(price) } } }


//    start： 指定Span的开始位置
//    end： 指定Span的结束位置，并不包括这个位置。
//    flags：取值有如下四个
//    Spannable. SPAN_INCLUSIVE_EXCLUSIVE：前面包括，后面不包括，即在文本前插入新的文本会应用该样式，而在文本后插入新文本不会应用该样式
//    Spannable. SPAN_INCLUSIVE_INCLUSIVE：前面包括，后面包括，即在文本前插入新的文本会应用该样式，而在文本后插入新文本也会应用该样式
//    Spannable. SPAN_EXCLUSIVE_EXCLUSIVE：前面不包括，后面不包括
//    Spannable. SPAN_EXCLUSIVE_INCLUSIVE：前面不包括，后面包括
//    what： 对应的各种Span，不同的Span对应不同的样式。已知的可用类有：
//    BackgroundColorSpan : 文本背景色
//    ForegroundColorSpan : 文本颜色
//    MaskFilterSpan : 修饰效果，如模糊(BlurMaskFilter)浮雕
//    RasterizerSpan : 光栅效果
//    StrikethroughSpan : 删除线
//    SuggestionSpan : 相当于占位符
//    UnderlineSpan : 下划线
//    AbsoluteSizeSpan : 文本字体（绝对大小）
//    DynamicDrawableSpan : 设置图片，基于文本基线或底部对齐。
//    ImageSpan : 图片
//    RelativeSizeSpan : 相对大小（文本字体）
//    ScaleXSpan : 基于x轴缩放
//    StyleSpan : 字体样式：粗体、斜体等
//    SubscriptSpan : 下标（数学公式会用到）
//    SuperscriptSpan : 上标（数学公式会用到）
//    TextAppearanceSpan : 文本外貌（包括字体、大小、样式和颜色）
//    TypefaceSpan : 文本字体
//    URLSpan : 文本超链接
//    ClickableSpan : 点击事件

    fun setMoneySymbol(
        originalPrice: String,
        activePrice: String = "0",
        scaleXSpan: Float = 0.7f,
        relativeSize: Float = 0.65f
    ): SpannableStringBuilder =
        SpannableStringBuilder().apply {
            if (activePrice == "0") {
                append("￥").append(originalPrice)
            } else {
                append("￥").append(activePrice).append("￥").append(originalPrice)
            }
            setSpan(
                ScaleXSpan(scaleXSpan),
                0, this.length,
                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
            );
            setSpan(
                RelativeSizeSpan(relativeSize), 0, 1,
                Spannable.SPAN_INCLUSIVE_EXCLUSIVE
            )
            if (activePrice == "0") {
                return@apply
            }
            setSpan(
                RelativeSizeSpan(0.7f), activePrice.length + 1, this.length,
                Spannable.SPAN_INCLUSIVE_EXCLUSIVE
            )
            setSpan(
                StrikethroughSpan(), activePrice.length + 1, this.length,
                Spannable.SPAN_INCLUSIVE_EXCLUSIVE
            )
            setSpan(
                ForegroundColorSpan(Color.parseColor("#999999")),
                activePrice.length + 1, this.length,
                Spannable.SPAN_INCLUSIVE_EXCLUSIVE
            )
        }


    fun setMoneyStyle(
        price1: Double, price2: Double = 0.00, isDivider: Boolean = false
    ): Spannable {
        SpannableStringBuilder().append("￥50.00 ￥100.00").setSpan(
            RelativeSizeSpan(37f), 0, 1,
            Spannable.SPAN_INCLUSIVE_INCLUSIVE
        )

        val ssb = SpannableStringBuilder().apply {
            append("").setSpan(
                AbsoluteSizeSpan(37), 0, 1,
                Spannable.SPAN_INCLUSIVE_INCLUSIVE
            )
        }

        if (price1 == 0.0) {
            val string: Spannable = SpannableString("￥0.00")
            string.setSpan(
                AbsoluteSizeSpan(37), 0, 1,
                Spannable.SPAN_INCLUSIVE_INCLUSIVE
            )
            return string
        }

        val df = DecimalFormat("############0.00")

        val priceString1 = "￥${df.format(price1)} "
        val priceString2 = "￥${df.format(price2)}"

        val priceMerge = "${priceString1}${if (price2 != 0.00) priceString2 else ""}"

        val string: Spannable = SpannableString(priceMerge)
        string.setSpan(
            AbsoluteSizeSpan(37), 0, 1,
            Spannable.SPAN_INCLUSIVE_INCLUSIVE
        )
        if (price2 == 0.00) {
            return string
        } else {
            val priceMergeLength: Int = priceMerge.length
            val priceString2Length: Int = priceString2.length
            val start: Int = priceMergeLength - priceString2Length
            string.setSpan(
                StrikethroughSpan(), start, priceMergeLength, Spannable.SPAN_INCLUSIVE_INCLUSIVE
            )
            string.setSpan(
                ForegroundColorSpan(Color.parseColor("#FF999999")),
                start, priceMergeLength,
                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
            )
            string.setSpan(
                AbsoluteSizeSpan(37), start, priceMergeLength, Spannable.SPAN_INCLUSIVE_INCLUSIVE
            )
            return string
        }
    }

    fun decimalFormat(money: Double): String {
        val df = DecimalFormat("############0.00")
        return "￥${df.format(money)}"
    }

    /**
     * 设置金额符号为原视图的一半
     * */
    fun setMoneySymbol(textView: TextView, money1: Double, isSymbol: Boolean = true): Spannable {
        val afterMoney: Spannable = SpannableString(decimalFormat(money1))
        if (!isSymbol) {
            return afterMoney
        }
        afterMoney.setSpan(
            AbsoluteSizeSpan((textView.textSize / 2).toInt()), 0, 1,
            Spannable.SPAN_INCLUSIVE_INCLUSIVE
        )
        return afterMoney
    }

//    /**
//     * 设置划线价格
//     * */
//    fun setMoneyScribing(
//        textView: TextView, money1: Double, money2: Double = 0.00, isSymbol: Boolean = true
//    ) {
//        val symbolMoney: Spannable = this.setMoneySymbol(textView, money1, isSymbol)
//
//        val
//        val afterMoney: Spannable = SpannableString(decimalFormat(money2))
//
//        afterMoney.setSpan(
//            StrikethroughSpan(), 0, priceMergeLength, Spannable.SPAN_INCLUSIVE_INCLUSIVE
//        )
//
//        symbolMoney.set()
//    }

}